#ifndef MOTEURRESEAU_H
#define MOTEURRESEAU_H

#include <string>
#include <fstream>
#include <QTcpSocket>
#include <QTcpServer>
#include <QHostAddress>

using namespace std;

#include "moteur.h"

class MoteurReseau : public Moteur {
    Q_OBJECT
    
    public:
        MoteurReseau(Jeu * parent) : Moteur(parent) {
            port = 4500;
            
            serveur = new QTcpServer();
            serveur->listen(QHostAddress::Any,port);
            QObject::connect(serveur, SIGNAL(newConnection()),this, SLOT(demande_connexion()));
            
            QObject::connect(&sock,SIGNAL(connected()),this,SLOT(connexion_OK())); //signal émis lors de la connexion au serveur
            // ??? DEBUG ???
            QObject::connect(&sock, SIGNAL(readyRead()), this, SLOT(lectureClient())); //signal émis lorsque des données sont prêtes à être lues

        }
        ~MoteurReseau() {}

        virtual void executer();
    
    private:
        virtual void traiterMessage(Message m);
        // traitement des messages
        void traiterDemandeInvitation(Message m);
        void traiterAccepterPartie(Message m);
        void traiterDeplacementPiece(Message m);
        void traiterChoixPromotion(Message m);

        QTcpServer *serveur;
        QTcpSocket *sockNewClient;
        QTcpSocket sock;
        int port;
        QString ip;
    
    private slots :
        void demande_connexion() ;
        void lectureServeur();
        
        void connexion_OK();
        void lectureClient();

};

#endif // MOTEURRESEAU_H

